package com.douya.common.pojo.vo;

import com.douya.common.enums.CommonResultEnums;
import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
 * 说明：返回给前端的统一对象
 *
 * @author 胡晨烨
 * @Date 2020/02/01
 */
@Data
@ToString(callSuper = true)
@Accessors(chain = true)
public class CommonResponseVO<T>{

    /**
     * 操作结果编码
     */
    private Integer resultCode;

    /**
     * 操作结果说明
     */
    private String resultMessage;

    /**
     * 返回数据
     */
    private T data;

    /**
     * 操作成功，无返回对象
     */
    public static <T> CommonResponseVO<T> success() {
        return born(CommonResultEnums.SUCCESS.getCode(), CommonResultEnums.SUCCESS.getMessage(), null);
    }

    /**
     * 操作成功，并返回对象给前端
     */
    public static <T> CommonResponseVO<T> success(T data) {
        return born(CommonResultEnums.SUCCESS.getCode(), CommonResultEnums.SUCCESS.getMessage(), data);
    }

    /**
     * 操作失败，无返回对象
     */
    public static <T> CommonResponseVO<T> error(CommonResultEnums result) {
        return born(result.getCode(), result.getMessage(), null);
    }

    /**
     * 操作失败，并返回对象给前端
     */
    public static <T> CommonResponseVO<T> error(CommonResultEnums result, T data) {
        return born(result.getCode(), result.getMessage(), data);
    }

    /**
     * 操作成功，并返回对象给前端
     */
    public static <T> CommonResponseVO<T> born(Integer resultCode, String resultMessage, T data) {
        return new CommonResponseVO<T>()
                .setResultCode(resultCode)
                .setResultMessage(resultMessage)
                .setData(data);
    }
}
